#include<iostream>
#include<string>
#include<vector>
#include<unistd.h>
#include<sys/wait.h>
#include"task.hpp"
#include"channel.hpp"
#include"processpool.hpp"
using namespace std;
//子进程工作的函数
void worker()
{
    while(true)
    {
        int taskid=0;
        int n=::read(0,&taskid,sizeof(taskid));
        if(n==sizeof(taskid))
        {
            ts.excute(taskid);
        }
        else if(n==0)
        {
            //写端关闭
            std::cout<<"子进程工作结束"<<getpid()<<"quit……"<<std::endl;
            break;
        }
        else
        {
            std::cerr<<"read";
            break;
        }
    }    
}

//进程池
int main(int argc,char* argv[])
{

    //使用方式的说明
    if(argc!=2)
    {
        cerr<<"Usage:"<<argv[0]<<"-num"<<endl;
        return USAGEFAIL;
    }

    //需要创建进程的个数
    int num=stoi(argv[1]);
    processpool pp(num,worker);
    //对进程进行管理
    //创建进程池
    pp.InitProcessPool();
    pp.detach();
    pp.DestoryProcessPool();
    // for(auto c:channels)
    // {
    //     cout<<c.name()<<endl;
    // }
    // sleep(10);
    
    //清理进程池
    
    return 0;
}